package com.epam.iunna.bookshop.controller.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.RegularExpression;

/**
 * Класс для работы со строками.
 * 
 *
 */
public final class StringUtils {
    /**
     * Пустой конструктор.
     */
    private StringUtils() {
        
    }
    /**
     * Сравнение строк.
     * @param target срвниваемое.
     * @param pattern шаблон.
     * @return совпадение.
     */

    public static boolean compare(final String target, final String pattern) {
        if(pattern.isEmpty() && !target.isEmpty()){
            return false;
        }
        RegularExpression exp = new RegularExpression(pattern);
        return exp.matches(target);
    }
/**
 * Сравнивает строку с шаблоном учитывая * и срвнивая общию длину.
 * @param pattern шаблон
 * @param str строка
 * @return совпадение.
 */
    public static boolean compareWithPattern(final String pattern, final String str) {
        if (pattern.charAt(pattern.length() - 1) == '*') {
            return str.indexOf(pattern.substring(0, pattern.length() - 1)) != -1;
        } else {
            if (pattern.charAt(0) == '*') {
                return str.indexOf(pattern.substring(1, pattern.length())) == str.length()
                        - pattern.length() + 1;
            } else {
                return str.indexOf(pattern) > -1
                        && str.indexOf(pattern) == str.length()
                                - pattern.length();
            }
        }
    }
/**
 * Сливает все строки массива.
 * @param array  массив строк
 * @return строка
 */
    public static String join(final String[] array) {
        return join(array, 0);
    }
/**
 * Сливает строки массива от startPos.
 * @param array массив строк
 * @param startPos с каких элементов начинаеться слияние
 * @return строка
 */
    public static String join(final String[] array, final int startPos) {
        return join(array, startPos, array.length - 1);
    }
/**
 * Сливает строки массива от startPos до stopPos.
 * @param array массив строк
 * @param startPos с каких элементов начинаеться слияние
 * @param stopPos до каких элементов слияние
 * @return строка
 */
    public static String join(final String[] array, final int startPos, final int stopPos) {
        return join(array, startPos, stopPos, "");
    }
/**
 * Сливает строки массива от startPos разделяя их delimiter .
 * @param array массив строк
 * @param startPos с каких элементов начинаеться слияние
 * @param delimiter разделитель
 * @return строка
 */
    public static String join(final String[] array, final int startPos, final String delimiter) {
        return join(array, startPos, array.length - 1, delimiter);
    }
/**
 * Сливает строки массива от startPos до stopPos разделяя их delimiter .
 * @param array массив строк
 * @param startPos с каких элементов начинаеться слияние
 * @param stopPos до каких элементов слияние
 * @param delimiter разделитель
 * @return строка
 */
    public static String join(final String[] array, final int startPos, final int stopPos,
            final String delimiter) {
        String result = "";
        for (int i = startPos; i <= stopPos; i++) {
            result += (i == stopPos) ? array[i] : (array[i] + delimiter);
        }
        return result;
    }

}
